package com.atguigu.bigdata.scala.chapter06

object Scala11_Object_Abstract {
    def main(args: Array[String]): Unit = {

        // TODO 面向对象编程 - 抽象
        // 控制抽象：函数作为参数的时候声明不完整，只需要传递代码即可
        // (f:()=>Unit) => (f: =>Unit)

        // 所谓的抽象，其实就是不完整
        // 抽象类：不完整的类
        // 抽象方法：不完整的方法
        // 一个类如果有抽象方法，那么这个类就是抽象类
        // 一个抽象类，不一定有抽象方法。
        // 既然抽象类不完整，所以无法直接构建对象,如果想要构建对象，需要由子类继承后构造
        // scala抽象和java的抽象一致

        //val user = new User();
        val user = new SubUser();

    }
    // scala中抽象类也使用abstract
    abstract class User {
        // 抽象方法，只有声明，没有实现
        // scala中抽象方法不需要增加abstract关键字, 编译时由编译器自动添加
        def test(): Unit
    }
    // 如果类继承了抽象类，那么类也是抽象类，除非将不完整的内容补全
    class SubUser extends User {
        // 所谓的抽象方法的补全，其实就是方法的重写
        def test(): Unit = {

        }
    }
}